Computers and other systems have used disk drives for many years to store digital information. This is because while computers and other systems may have sufficient host memory (such as random access memory) to perform ongoing computational tasks, storing large amounts of data, be it an operating system, application programs, or program data, is impractical using anything but a mass storage device such as a disk drive.
FIG. 1 illustrates a typical prior art computer system 100 that includes a main memory 102 for storing programs and data used by a processor 104. The system 100 further includes auxiliary systems that are generically shown as a chipset 106. The chipset 106 includes a host controller 108 that assists data integration with a disk drive 110. The disk drive 110 includes drive electronics 112 that includes a buffer memory 114. Typically, the buffer memory 114 is a dynamic random access memory (DRAM) of 2 MB-8 MB. Data is passed between the host controller 108 and the drive electronics 112 via a bi-directional bus 116. To enable integration of the various components of the system 100, that system operates under the control of an operating system 118.
While there are many types of disk drives 110, such as floppy disks and optical disks, probably the most widely used is the hard disk drive. A hard disk drive can record massive amounts of digital information on concentric memory tracks of magnetic medium placed on one or more disks. The digital information itself is recorded as magnetic transitions within the magnetic medium. FIG. 2 illustrates a typical disk 200 of a disk drive 110. That disk is divided into a plurality of sectors 205, only one of which is shown. The digital information is recorded in one or more of the sectors 205, with the actual location of the digital information being recorded on a table 210 located on a portion of the disk 200. In operation, disks are mounted on a spindle and turned at very high speeds by a spindle motor. Information on the disks is accessed using magnetic read/write heads located on pivoting arms that move over the disks.
Hard disk drives require more than just mechanical components. In fact, modern hard disk drives include sophisticated drive electronics that provide an interface for transmitting and receiving data to and from external devices, and a Head Disk Assembly Interface for interfacing the drive electronics to a head disk assembly. The head disk assembly includes the disks, the read/write head(s), the spindle motor that rotates the disks, a servo-operated actuator arm that moves the read/write head(s), and other disk drive components. The drive electronics also include servo drivers to move the actuator arms, motor drivers to drive the spindle motor, write drivers to drive the read/write head(s) to write data, an amplifier to amplify data being read, logic to determine where particular data is to be written to or read from, and data formatting to convert incoming data to the proper format for writing and for converting outgoing data to the proper format for the external system. Generally, the drive electronics are operated under the control of a processor.
The buffer memory 114 is used to temporarily store data. For example, data to be written may be temporarily stored in the buffer memory 114 until the read/write head(s) are moved to the correct write location(s), while data that has been read may be stored in the buffer memory 114 while data integrity checks are performed to ensure that the read data is good.
As disk drives 110 have developed their data density, that is, the amount of data stored per square millimeter, has increased dramatically. While this is highly beneficial from cost, size, and efficiency considerations, data errors have become more common. In fact, data errors are so common that cyclic redundancy check (CRC) codes are stored with the data and extensive error checking and correction (ECC) to both detect errors and to correct “fixable” errors is commonplace. Additionally, because of the speed of data transmissions, noise, and cabling issues, the use of cyclic redundancy check (CRC) codes to detect communication errors is also very common.
In the prior art, data is recovered and then sent after error checking and correction had been performed. The general process is to store data along with both error checking and correction and disk cyclic redundancy check data. Then, when reading data (either to obtain data or to ensure that the data that was written was written correctly) the data is obtained along with its cyclic redundancy check data. Then, error checking and correction is performed on the recovered data to verify that the read data is good and/or to correct that data. Then, the corrected data and communication CRC data are packaged together into a data packet and sent to the host controller 108. Thus, two types of CRC data were typically involved. First, disk CRC data stored with data on the disk to ensure viable data recovery, and then communication CRC data sent with the corrected data to ensure communication viability.
While generally successful, in the prior art data transfer did not occur until a whole sector 205 had been read and ECC and CRC processing were completed. This decreased data flow because of the need to access a complete sector of data before transmission.
Therefore, it would be beneficial to improve data flow from a disk drive to a host system by sending data as it is being read without having to wait to read a complete sector of data and to perform ECC and CRC processes.